package Day07;
/*
冒泡排序算法:  冒泡排序算法准对数组
   1.比较相邻的元素。如果第一个比第二个大，就交换他们两个的位置。
   2.对每一对相邻元素做同样的工作，从开始第一对到结尾的最后一对。在这一点，最后的元素应该会是最大的数。
   3.针对所有的元素重复以上的步骤，除了最后一个。
   4.持续每次对越来越少的元素重复上面的步骤，直到没有任何一对数字需要比较

   假设有一个数组{13，42，21，50，3}==》{3，13，21，42，50}

   冒泡排序流程：
     相邻位置比较，小数往前放，大数往后放
      第0轮
          0   1   2   3   4
          13  42  21  50  3     arr[0]<arr[1],不交换位置
          13  21  42  50  3     arr[1]>arr[2],交换位置
          13  21  42  50  3     arr[2]<arr[3],不交换
          13  21  42  3   50    arr[3]>arr[4],交换

          在4位置上，我们得到一个最大数：50
          由于最大的数已经确定，但是从0位置到3位置的数还不确定，我们继续比较0位置到3位置的元素

     第1轮：
     .......

 */
public class ArrayDemo04 {
    public static void main(String[]args){
        //1.定义一个数组
        int[]arr={13,42,21,50,3,0};
        //2.对arr数组进行冒泡排序
        for (int i=0;i<arr.length-1;i++){    //控制冒泡排序的轮数

            /*
               j   j+1
               0    1       第0轮      j=3  最后一轮比较   轮数{0}+j{3}+1=4
               1    2
               2    3
               3    4

               0    1       第1轮      j=2  最后一轮比较   轮数{1}+j{2}+1=4
               1    2
               2    3

               0    1       第2轮      j=1  最后一轮比较   轮数{2}+j{1}+1=4
               1    2

               0    1       第3轮      j=0  最后一轮比较   轮数{3}+j{0}+1=4

                                            j=4-轮数-1   轮数是i
                                            j<=arr.length-1-1-i
                                            j<arr.length-i-1
             */

            for (int j=0;j<arr.length-i-1;j++){ //每轮相邻的位置元素的比较
                if (arr[j]>arr[j+1]){
                    //交换两个元素的位置
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        //3.对排序好的数组打印
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}
